Testing of code generally has followed three traditional procedures. One procedure involves unit testing where a number of languages including Java, Python, and so forth encourage the designer to provide test procedures that exercise a particular portion of code. Thus, it is up to the designer to ensure that the unit tests completely cover all execution paths. Another testing procedure involves code coverage where tools are applied to determine code paths that have been traversed during testing. Still yet another form of testing includes ad hoc testing, where the programmer performs their own informal testing.